home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / sysdev.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  3KB  |  95 lines

  1. /**
  2.  * System devices follow a slightly different driver model. 
  3.  * They don't need to do dynammic driver binding, can't be probed, 
  4.  * and don't reside on any type of peripheral bus. 
  5.  * So, we represent and treat them a little differently.
  6.  * 
  7.  * We still have a notion of a driver for a system device, because we still
  8.  * want to perform basic operations on these devices. 
  9.  *
  10.  * We also support auxillary drivers binding to devices of a certain class.
  11.  * 
  12.  * This allows configurable drivers to register themselves for devices of
  13.  * a certain type. And, it allows class definitions to reside in generic
  14.  * code while arch-specific code can register specific drivers.
  15.  *
  16.  * Auxillary drivers registered with a NULL cls are registered as drivers
  17.  * for all system devices, and get notification calls for each device. 
  18.  */
  19.  
  20.  
  21. #ifndef _SYSDEV_H_
  22. #define _SYSDEV_H_
  23.  
  24. #include <linux/kobject.h>
  25.  
  26.  
  27. struct sys_device;
  28.  
  29. struct sysdev_class {
  30.     struct list_head    drivers;
  31.  
  32.     /* Default operations for these types of devices */
  33.     int    (*shutdown)(struct sys_device *);
  34.     int    (*suspend)(struct sys_device *, u32 state);
  35.     int    (*resume)(struct sys_device *);
  36.     struct kset        kset;
  37. };
  38.  
  39.  
  40. extern int sysdev_class_register(struct sysdev_class *);
  41. extern void sysdev_class_unregister(struct sysdev_class *);
  42.  
  43.  
  44. /**
  45.  * Auxillary system device drivers.
  46.  */
  47.  
  48. struct sysdev_driver {
  49.     struct list_head    entry;
  50.     int    (*add)(struct sys_device *);
  51.     int    (*remove)(struct sys_device *);
  52.     int    (*shutdown)(struct sys_device *);
  53.     int    (*suspend)(struct sys_device *, u32 state);
  54.     int    (*resume)(struct sys_device *);
  55. };
  56.  
  57.  
  58. extern int sysdev_driver_register(struct sysdev_class *, struct sysdev_driver *);
  59. extern void sysdev_driver_unregister(struct sysdev_class *, struct sysdev_driver *);
  60.  
  61.  
  62. /**
  63.  * sys_devices can be simplified a lot from regular devices, because they're
  64.  * simply not as versatile. 
  65.  */
  66.  
  67. struct sys_device {
  68.     u32        id;
  69.     struct sysdev_class    * cls;
  70.     struct kobject        kobj;
  71. };
  72.  
  73. extern int sysdev_register(struct sys_device *);
  74. extern void sysdev_unregister(struct sys_device *);
  75.  
  76.  
  77. struct sysdev_attribute { 
  78.     struct attribute    attr;
  79.     ssize_t (*show)(struct sys_device *, char *);
  80.     ssize_t (*store)(struct sys_device *, const char *, size_t);
  81. };
  82.  
  83.  
  84. #define SYSDEV_ATTR(_name,_mode,_show,_store)         \
  85. struct sysdev_attribute attr_##_name = {             \
  86.     .attr = {.name = __stringify(_name), .mode = _mode },    \
  87.     .show    = _show,                    \
  88.     .store    = _store,                    \
  89. };
  90.  
  91. extern int sysdev_create_file(struct sys_device *, struct sysdev_attribute *);
  92. extern void sysdev_remove_file(struct sys_device *, struct sysdev_attribute *);
  93.  
  94. #endif /* _SYSDEV_H_ */
  95.